////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  camxoisdriver.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef CAMXOISDRIVER_H
#define CAMXOISDRIVER_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "camxsensorcommon.h"

#define CAMX_NAMESPACE_BEGIN namespace CamX {
#define CAMX_NAMESPACE_END }

CAMX_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// OISSlaveInfo
/// Comments:      OIS slave information
///                 element for OISName
///                 element for slaveAddress
///                 element for i2cFrequencyMode
///                 element for firmware flag
///                 element for ois calibration flag
///                 element for powerUpSequence
///                 element for powerDownSequence
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct OISSlaveInfo
{
    /// Name of the OIS
    CHAR*                               OISName;
    /// 8-bit or 10-bit write slave address
    UINT16                              slaveAddress;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// i2cFrequencyMode
    /// Default Value: FAST
    /// Comments:      I2C frequency mode of slave
    ///                Supported modes are: STANDARD (100 KHz), FAST (400 KHz), FAST_PLUS (1 MHz), CUSTOM (Custom frequency in
    ///                DTSI)
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    I2CFrequencyMode  i2cFrequencyMode;
    /// OIS firm ware update flag
    UINT16                              fwflag;
    /// OIS calibration flag
    UINT16                              oiscalib;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// powerUpSequence
    /// Comments:      Sequence of power configuration type and configuration value required to control power to the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PowerSequenceInfo powerUpSequence;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// powerDownSequence
    /// Comments:      Sequence of power configuration type and configuration value required to control power to the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PowerSequenceInfo powerDownSequence;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// OISopcode
/// Comments:      OIS Opcode
///                 element for prog
///                 element for coeff
///                 element for pheripheral
///                 element for memory
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct OISopcode
{
    /// OIS code prog
    UINT32 prog;
    /// OIS code coeff
    UINT32 coeff;
    /// OIS code pheripheral
    UINT32 pheripheral;
    /// OIS code memory
    UINT32 memory;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// OISDriverData
/// Comments:      OIS driver data
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct OISDriverData
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// slaveInfo
    /// Comments:      OIS slave information
    ///                 element for OISName
    ///                 element for slaveAddress
    ///                 element for i2cFrequencyMode
    ///                 element for firmware flag
    ///                 element for ois calibration flag
    ///                 element for powerUpSequence
    ///                 element for powerDownSequence
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    OISSlaveInfo                    slaveInfo;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// opcode
    /// Comments:      OIS Opcode
    ///                 element for prog
    ///                 element for coeff
    ///                 element for pheripheral
    ///                 element for memory
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    OISopcode                       opcode;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// oisinitSettings
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    SettingsInfo  oisinitSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableOisSettings
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    SettingsInfo  enableOisSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// disableOisSettings
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    SettingsInfo  disableOisSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enterDownloadModeSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          enterDownloadModeSettingsExists;
    UINT32                          enterDownloadModeSettingsID;
    SettingsInfo  enterDownloadModeSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// movieModeSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          movieModeSettingsExists;
    UINT32                          movieModeSettingsID;
    SettingsInfo  movieModeSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// stillModeSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          stillModeSettingsExists;
    UINT32                          stillModeSettingsID;
    SettingsInfo  stillModeSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// centeringOnSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          centeringOnSettingsExists;
    UINT32                          centeringOnSettingsID;
    SettingsInfo  centeringOnSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// centeringOffSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          centeringOffSettingsExists;
    UINT32                          centeringOffSettingsID;
    SettingsInfo  centeringOffSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// pantiltOnSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          pantiltOnSettingsExists;
    UINT32                          pantiltOnSettingsID;
    SettingsInfo  pantiltOnSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sceneOisSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          sceneOisSettingsExists;
    UINT32                          sceneOisSettingsID;
    SettingsInfo  sceneOisSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sceneFilterOnSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          sceneFilterOnSettingsExists;
    UINT32                          sceneFilterOnSettingsID;
    SettingsInfo  sceneFilterOnSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sceneFilterOffSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          sceneFilterOffSettingsExists;
    UINT32                          sceneFilterOffSettingsID;
    SettingsInfo  sceneFilterOffSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sceneRangeOnSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          sceneRangeOnSettingsExists;
    UINT32                          sceneRangeOnSettingsID;
    SettingsInfo  sceneRangeOnSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sceneRangeOffSettings - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Sequence of register settings to configure the device
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                          sceneRangeOffSettingsExists;
    UINT32                          sceneRangeOffSettingsID;
    SettingsInfo  sceneRangeOffSettings;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// OISDriverDataClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class OISDriverDataClass : public ParameterModule, public OISDriverData
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    OISDriverDataClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    OISDriverDataClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~OISDriverDataClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load OISSlaveInfo
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadOISSlaveInfo(
        ParameterFileSymbolTableEntry* entry,
        OISSlaveInfo* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load OISopcode
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadOISopcode(
        ParameterFileSymbolTableEntry* entry,
        OISopcode* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load OISDriverData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadOISDriverData(
        ParameterFileSymbolTableEntry* entry,
        OISDriverData* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        OISDriverData::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload OISSlaveInfo
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadOISSlaveInfo(
        OISSlaveInfo* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload OISDriverData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadOISDriverData(
        OISDriverData* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class OISDriverDataClass

CAMX_NAMESPACE_END
#endif // CAMXOISDRIVER_H

